//
//  XBArrayList.h
//  数据结构算法和笔试题
//
//  Created by 王国栋 on 16/5/28.
//  Copyright © 2016年 xiaobai. All rights reserved.
//

#include "BaseMsg.h"
#ifndef XBArrayList_h
#define XBArrayList_h

typedef struct
{
    
    DATATYPE data[MAX_SIZE];//最大空间
    int length;
    
}XBArrayList;

/*
 
 线性表:是零或多个元素组成的有限序列，数据元素类型相同，除了第一个元素外，每个数据都有的一个直接前驱元素，
 
 除了最后一个元素外，每一个元素都有一个直接后继元素.数据元素中间的关系是一对一
 
 */

#include <stdio.h>

//常用的基本操作

/**
 初始化一个空的线性表
 
 @ param ArrayList 需要初始化的空的线性表的指针
 */
void initXBArrayList(XBArrayList * ArrayList);
/**
 *  判断是否为空
 *
 *  @param ArrayList 判断的线性表
 *
 *  @return 1 表示为空 0 表示不为空
 */
int isXBArrayListEmpty(XBArrayList * ArrayList);

/**

 在线性表里面添加一个元素
 
 */
int addItemToXBArrayList (XBArrayList * ArrayList,DATATYPE obj);

/**
 *  清空线性表
 */
void clearXBArrayList(XBArrayList * ArrayList);
/**
 *  将线性表ArrayList里面的idx所在位置的值读取出来交给obj
 *
 *  @param ArrayList 操作的线性表
 *  @param idx       所查找的索引
 *  @param obj       用来存放目标值的变量
    
    @return 返回操作结果
 */

int getItemFromXBArrayListByIndex(XBArrayList ArrayList,int idx,DATATYPE * obj);
/**
 *  查询obj是否在ArrayList里面
 *
 *  @param ArrayList 所查找的线性表
 *  @param obj       搜索的目标值
 *
 *  @return 目标值在线性表里面的位置 失败 表示没有找到，否则返回正确位置，多个话只返回第一个位置
 */

int findItemInXBArrayList(XBArrayList ArrayList,DATATYPE obj);

/**
 *  在线性表里面插入一个元素
 *
 *  @param ArrayList 操作的线性表
 *  @param idx       插入的位置
 *  @param obj       需要插入的数据
 *
 *  @return 1表示成功，0表示失败
 */
int insertItemInXBArrayList(XBArrayList *ArrayList,int idx,DATATYPE obj);
/**
 *
 *  删除线性表idx位置的元素
 *  @return 返回操作结果
 */

int deleteItemInXBArrayList(XBArrayList *ArrayList,int idx);
/**
 *  
    获取线性表的长度
 */
int getLengthForXBArrayList(XBArrayList ArrayList);


void printXBArrayListData(XBArrayList ArrayList);

/**
 * 修改线性表的某个位置的值
 */
int replaceXBArrayListatIdx(XBArrayList *ArrayList,int idx,DATATYPE obj);

void swapXBArrayList(XBArrayList * ArrayList,int idx1,int idx2);
#endif /* XBArrayList_h */
